package com.demo.utils.error;

import lombok.AllArgsConstructor;

/**
 * @author zhloong
 */

@AllArgsConstructor
public enum GlobalErrorEnum implements IError {

    /**
     * 成功统一 200
     */
    SUCCESS(200, "成功"),
    /**
     * 警告
     */
    WARN(301, "操作失败"),
    /**
     * 错误
     */
    ERROR(-1, "操作失败"),
    /**
     * 请求方式不支持
     */
    REQUEST_TYPE_ERROR(400, "请求方式不支持"),
    /**
     * 访问受限，授权过期
     */
    FORBIDDEN(401, "登录过期，请重新登录"),
    /**
     * 数据权限错误
     */
    DATA_SCOPE(403, "无访问权限，请联系管理员"),

    /**
     * 业务异常通用失败
     */
    FAIL(200000, "业务异常"),
    /**
     * 系统内部异常
     */
    SYSTEM_DEFAULT_ERROR(100000, "请求失败，请稍后再试"),
    /**
     * 服务间调用异常
     */
    FALLBACK_ERROR(100010, "fallback"),

    /**
     * APM接口异常
     */
    APM_SERVICE_ERROR(401, "访问受限或授权过期"),
    /**
     * 用户已禁用，请联系客服
     */
    USER_DISABLED(401, "用户已禁用，请联系客服"),
    /**
     * 参数解析异常
     */
    REQUEST_PARAMETER_ANALYSIS_ERROR(100001, "参数解析异常"),
    /**
     * 入参异常
     */
    REQUEST_PARAMETER_ERROR(REQUEST_TYPE_ERROR.getErrorCode(), "入参异常"),
    /**
     * 数据库异常
     */
    DB_ERROR(100003, "数据库异常,请联系管理员"),

    /**
     * 文件上传失败
     */
    FILE_UPLOAD_ERROR(100015, "文件上传失败"),
    FILE_READ_ERROR(100016, "文件读取失败"),

    /**
     * 与PHP保持一致，statusCode返回-1
     */
    RETURN_STATUS_CODE_ERROR(200, "PHP保持一致,业务异常statusCode为200"),

    RETURN_STATUS_CODE_ERROR_1(-1, "PHP保持一致,业务异常statusCode为200"),

    VALID_STATUS_CODE_ERROR(422, "PH校验参数失败code"),
    /**
     * 卡券列表查询不到返回异常
     */
    NO_CARD_COUPONS_CODE_ERROR(600081, "该会员暂无卡券，请联系顾客进行确认"),
    ;

    private final Integer code;

    private final String message;

    @Override
    public Integer getErrorCode() {
        return this.code;
    }

    @Override
    public String getErrorMessage() {
        return this.message;
    }
}
